为什么redo log有两阶段提交?
2 分钟阅读
•
328 字
+
195 词
首先是为了
保证redo log和bin log之间的逻辑一致。
事务提交后,redo log 和bin log都要持久化到磁盘,但是这两个是独立的逻辑,可能出现半成功的状态,这样就造成两份日志之间的逻辑不一致。
我们可以用反证的方式,如果采用以下操作:
- 先写redo log再写bin log:假设在redo log写完,bin log还没有写完的时候,mysql挂掉了。然后系统重启通过redo log进行数据恢复,但是这个时候bin log中是没有这个数据的。所以如果要用bin log来恢复临时库的话,这个库就会少了这次更新。
- 先写bin log再写redo log:假设在bin log写完,mysql挂掉了。然后系统重启通过bin log进行数据恢复,但是这个时候redo log中是没有这个数据的。所以使用bin log来恢复的话就会多出一次事务。